// 引入依赖模块
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var cors = require('cors');
var multiparty = require('multiparty');
var indexRouter = require('./routes/index');
var oneRouter = require('./routes/one');

// 创建 Express 应用
var app = express();

// 设置视图引擎和视图文件路径
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// 使用中间件
app.use(logger('dev')); // 日志记录中间件
app.use(cors()); // 处理跨域请求
app.use('/upload', express.static('upload')); // 配置上传图片虚拟路由和上传目录
app.use(express.json()); // 解析 JSON 请求体
app.use(express.urlencoded({ extended: false })); // 解析表单请求体
app.use(cookieParser()); // 解析 Cookie
app.use(express.static(path.join(__dirname, 'public'))); // 静态资源目录
app.use(bodyParser.json({limit: '10mb'})); // 解析 JSON 请求体
app.use(bodyParser.urlencoded({limit: '10mb', extended: true})); // 解析表单请求体

// 路由配置
app.use('/', indexRouter);
app.use('/one', oneRouter);

// 处理 404 错误并转发到错误处理中间件
app.use(function(req, res, next) {
  next(createError(404));
});

// 错误处理中间件
app.use(function(err, req, res, next) {
  // 设置本地变量，仅在开发环境提供错误信息
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // 渲染错误页面
  res.status(err.status || 500);
  res.render('error');
});

// 导出应用
module.exports = app;